from typing import Iterable
import matplotlib.pyplot as plt
import numpy as np
from typing import Iterable

# 显示原始数据
def showData(data:Iterable):
    data = np.asarray(data)  # n * 8维，一个通道一列
    fig, aix = plt.subplots()
    colLen = data.shape[-1]
    for i in range(colLen):
        aix.plot(data[:,i], label =  7 - i)
    aix.legend()
    plt.show()

# 显示一维数组
def showArray(data):
    fig, aix = plt.subplots()
    aix.plot(data)
    plt.show()


# 沿着时间变变化，一人数据
# 此函数效果还可以，就是有bug，程序关不掉
def showWithTime(data: Iterable):
    data = np.asarray(data)  # n * 8维，一个通道一列
    rowLen = data.shape[0]
    colLen = data.shape[-1]

    plt.ion() #开启interactive mode 成功的关键函数
    fig, aix = plt.subplots()
    for i in range(2000, rowLen, 10):
        plt.cla()
        plt.ylim(-90000, 90000)
        for j in range(colLen):
            aix.plot(data[i - 100 : i,j], label = j) # 每次展示长度为100的区间的数据，并让这个区间每次右移10，这样可以达到一种动态变化的效果
        # aix.legend()
        plt.pause(0.01)


# 沿着时间变变化，多人数据
# 此函数效果还可以，就是有bug，程序关不掉
def showWithTimeMultiPerson(datas):  # datas: personNum * n * 8 维，一个通道一列
    personNum = len(datas)
    rowLen = len(datas[0])
    colLen = len(datas[0][0])


    plt.ion() #开启interactive mode 成功的关键函数
    persons = []
    aixs = []
    for personIdx in range(personNum):
        aix = plt.subplot(3, 2, personIdx + 1)
        aixs.append(aix)
        persons.append(np.asarray(datas[personIdx]))

    start = False
    for i in range(100, rowLen, 30):
        for personIdx in range(personNum):
            aixs[personIdx].clear()
            aixs[personIdx].set_ylim(-140000, 140000)
            for j in range(colLen):
                aixs[personIdx].plot(persons[personIdx][i - 100 : i,j])
                if start != True:
                    input()
                    start = True

        # aix.legend()
        plt.pause(0.01)


if __name__ == "__main__":
    from fileStream import FileStream
    from dataClean import smooth
    path = "./data/slow/3.txt"

    fileStream = FileStream(path)
    data = fileStream.loadFile()
    showData(data)

    